Turbo product codes (TPC) are a type of code where the data is arranged in an array (e.g., k bits wide and R bits high) prior to encoding. During the encoding process, a first code is applied in the horizontal direction to produce row parity information. Typically, but not always, the height of each row is 1 bit. A second code is then applied in the vertical direction (including on the row parity information) to produce column parity information. In some embodiments, the width of each column is two or more bits. The performance of TPC systems eventually hits an error floor as the bit error rate goes down. New techniques which push the error floor down further would be desirable.